Reader: Harden the Skip button and add interest-selection debug controls - #25924
Merged
Conversation
Contributor
|
| App Name | WordPress | |
| Configuration | Release-Alpha | |
| Build Number | 33914 | |
| Version | PR #25924 | |
| Bundle ID | org.wordpress.alpha | |
| Commit | 25da1f4 | |
| Installation URL | 5kdtul7ahdje8 |
Contributor
|
| App Name | Jetpack | |
| Configuration | Release-Alpha | |
| Build Number | 33914 | |
| Version | PR #25924 | |
| Bundle ID | com.jetpack.alpha | |
| Commit | 25da1f4 | |
| Installation URL | 3t8gokrrq2o3g |
Contributor
🤖 Build Failure AnalysisThis build has failures. Claude has analyzed them - check the build annotations for details. |
Contributor
|
The changes look good to me. But this PR may need a rebase and target the trunk branch. |
Follow-up to #25921 addressing review findings: - Track a `select_interests_skipped` event; skip was the one interest-selection outcome with no analytics, so the funnel could not distinguish it from an abandonment. - Disable the button on first tap to debounce, matching the primary button; a fast double-tap could otherwise re-run the Discover flow's dismiss and forced stream sync. - Call `readerDiscoverFlowDelegate?.didCompleteReaderDiscoverFlow()` on skip so a flow that both shows Skip and sets the delegate completes. Inert today — the only Skip flow (Discover) leaves the delegate nil.
The select-interests screen is a one-time onboarding prompt gated by `readerDidSelectInterestsKey` and an `isFollowingInterests` check, which makes it hard to see again during development. Adds two internal-only Developer menu actions: - Show Reader Interests Screen — presents the `.discover` screen directly, bypassing both gates so it can be inspected on any account. - Reset Reader Interests Prompt — clears `readerDidSelectInterestsKey` so the real auto-prompt can fire again on the next Discover visit.
The debug menu's shared `showSuccessNotice()` posts a bare "✅" emoji, which is illegible against the notice's inverted (light-in-dark-mode) background. Post a text confirmation for the Reset Reader Interests Prompt action instead.
jkmassel
force-pushed
the
jkmassel/skip-button-followups
branch
from
August 24, 2026 20:29
34dc97c to
25da1f4
Compare
Contributor
Author
|
@crazytonyli – this is rebased and ready for another look! |
crazytonyli
approved these changes
Aug 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Follow-up to the Skip button (#25921, now merged): review fixes to the new Skip button, plus internal tooling to exercise the interest-selection screen.
What changed
Skip button (user-facing)
select_interests_skippedevent. Tapping Skip completes the flow and permanently setsreaderDidSelectInterestsKey, but emitted nothing — so the funnel couldn't tell a skip from an abandonment (select_interests_shownwith no terminal event). Adds the event alongside the existingselect_interests_shown/select_interests_picked.ReaderDiscoverViewController.didSaveInterests()— a seconddismissand another forced stream refresh.sender.isEnabled = falseon first tap prevents the re-entry.readerDiscoverFlowDelegate?.didCompleteReaderDiscoverFlow(); Skip didn't. This is inert today — the only flow that shows Skip (.discover) never sets the delegate, and the only flow that sets the delegate (Stats' "Grow your audience" nudge) uses a config withshowsSkipButton == false. But those two config flags are independent: flipshowsSkipButtonon the Stats config and Skip would silently fail to mark the nudge complete, so the card would reappear on every visit. Calling the delegate on Skip closes that with no change to current behavior.Debug controls (internal builds only)
The select-interests screen is a one-time onboarding prompt, hard to see again during development. Adds two actions under Developer → Settings:
.discoverscreen (with the Skip button) directly, bypassing both thereaderDidSelectInterestsKeyflag and theisFollowingInterestscheck that gate it, so it works on any account.readerDidSelectInterestsKeyso the real auto-prompt fires again on the next Reader → Discover visit (still subject toisFollowingInterests— an account following no tags).The reset action posts a text confirmation notice. It first reused the debug menu's shared
showSuccessNotice(), which posts a bare "✅"; app notices render on an inverted background (light in dark mode), so an emoji-only toast reads as a blank light box in dark mode. A text title renders legibly in both appearances.Not in this PR — Skip is unavailable in the offline / empty state
When the interests request fails or returns empty, the Discover flow shows only the "Try Again" NoResults overlay: Skip — like the primary button — lives inside
contentContainerView, which fades toalpha 0during loading and is covered by the overlay, and the sheet is presented without a nav bar and withisModalInPresentation = true, so there is no way out until the network recovers. This predates the Skip button (the primary button is equally unavailable there); fixing it means extending the deprecatedNoResultsViewControlleror restructuring the empty/error presentation — both larger than a review follow-up and risky for the Stats flow that shares this screen.Test plan
select_interests_skippedevent fires on Skip (Tracks debug console);select_interests_pickedstill fires on the Done path.Related